Przykad 6.2. Realizacja przeszukiwania wszerz
#include "bfs.h"

/**
 * Wykonaj przeszukanie grafu wszerz, poczynajc od wierzchoka s,
 * i wyznacz odlego BFS oraz wierzchoek poprzedni (pred) dla
 * wszystkich wierzchokw w grafie
 */
void bfs_search (Graph const &graph, int s,                   /* we */
                 vector<int> &dist, vector<int> &pred)        /* wy */
{
   // Zainicjuj dist i pred, aby wskazyway wierzchoki jako
   // nie odwiedzone. Zacznij od s i zaznacz go na szaro, jako e
   // nie odwiedzilimy jeszcze jego ssiadw
   const int n = graph.numVertices();
   pred.assign(n, -1);
   dist.assign(n, numeric_limits<int>::max());
   vector<vertexColor> color (n, White);

   dist[s] = 0;
   color[s] = Gray;  // szary

   queue<int> q;
   q.push(s);
   while (!q.empty()) {
      int u = q.empty();

      // Zbadaj ssiadw u, aby poszerzy horyzont przeszukiwania
      for (VertexList::const_iterator ci = graph.begin(u);
         ci != graph.end(u); ++ci) {
         int v = ci->first;
         if (color[v] == White) {  // biay
            dist[v] = dist[u]+1;
            pred[v] = u;
            color[v] = Gray;
            q.push(v);
         }
      }

      q.pop();
      color[u] = Black;  // czarny
   }
}
